package cn.stylefeng.guns.modular.manager.service;

import cn.stylefeng.guns.base.pojo.page.LayuiPageInfo;
import cn.stylefeng.guns.modular.manager.entity.ArchiveInfo;
import cn.stylefeng.guns.modular.manager.model.params.ArchiveInfoParam;
import cn.stylefeng.guns.modular.manager.model.params.ArchiveInfoReportParam;
import cn.stylefeng.guns.modular.manager.model.result.ArchiveInfoReport;
import cn.stylefeng.guns.modular.manager.model.result.ArchiveInfoResult;
import cn.stylefeng.guns.tree.LayuiTree;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 档案信息表 服务类
 * </p>
 *
 * @author blesslp
 * @since 2019-11-20
 */
public interface ArchiveInfoService extends IService<ArchiveInfo> {

    /**
     * 新增
     *
     * @author blesslp
     * @Date 2019-11-20
     */
    ArchiveInfo add(ArchiveInfoParam param);

    /**
     * 删除
     *
     * @author blesslp
     * @Date 2019-11-20
     */
    void delete(ArchiveInfoParam param);

    /**
     * 更新
     *
     * @author blesslp
     * @Date 2019-11-20
     */
    ArchiveInfo update(ArchiveInfoParam param);

    /**
     * 查询单条数据，Specification模式
     *
     * @author blesslp
     * @Date 2019-11-20
     */
    ArchiveInfoResult findBySpec(ArchiveInfoParam param);

    /**
     * 查询列表，Specification模式
     *
     * @author blesslp
     * @Date 2019-11-20
     */
    List<ArchiveInfoResult> findListBySpec(ArchiveInfoParam param);

    /**
     * 查询分页数据，Specification模式
     *
     * @author blesslp
     * @Date 2019-11-20
     */
    LayuiPageInfo findPageBySpec(ArchiveInfoParam param);

    LayuiPageInfo findNoBorrowList(ArchiveInfoParam param);

    /**
     * 根据借阅id查询所借档案
     *
     * @param id
     * @return
     */
    LayuiPageInfo findBorrowList(Long id);

    /**
     * 根据销毁单查询档案列表
     *
     * @param id
     * @return
     */
    LayuiPageInfo listDestroy(Long id);

    /**
     * 通过nd分组
     *
     * @return
     */
    List<LayuiTree> groupByNd();

    /**
     * 通过部门分组
     *
     * @return
     */
    List<LayuiTree> groupByBm();

    /**
     * 通过档案位置分组
     *
     * @return
     */
    List<LayuiTree> groupByDah();

    /**
     *
     * @param param 报表参数
     * @return
     */
    List<ArchiveInfoReport> report(ArchiveInfoReportParam param);
}
